home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / OS / FWODMisc / FWBArray.cpp < prev    next >
Encoding:
Text File  |  1996-09-17  |  4.4 KB  |  169 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWBArray.cpp
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWOS.hpp"
  11.  
  12. #ifndef FWBARRAY_H
  13. #include "FWBArray.h"
  14. #endif
  15.  
  16. // ----- Foundation Includes -----
  17.  
  18. #ifndef   FWMEMMGR_H
  19. #include "FWMemMgr.h"
  20. #endif
  21.  
  22. #ifndef FWPRIDEB_H
  23. #include "FWPriDeb.h"
  24. #endif
  25.  
  26. //========================================================================================
  27. //    Runtime Informations
  28. //========================================================================================
  29.  
  30. #ifdef FW_BUILD_MAC    
  31. #pragma segment fwodmisc
  32. #endif
  33.  
  34. //========================================================================================
  35. //    class FW_CByteArray
  36. //========================================================================================
  37.  
  38. FW_DEFINE_AUTO(FW_CByteArray)
  39.  
  40. //----------------------------------------------------------------------------------------
  41. //    FW_CByteArray::FW_CByteArray
  42. //----------------------------------------------------------------------------------------
  43.  
  44. FW_CByteArray::FW_CByteArray() :
  45.     fOwnBuffer(TRUE),
  46.     fOffset(0)
  47. {    
  48.     _buffer = (octet*)NULL;
  49.     _length = 0;
  50.     _maximum = 0;
  51.  
  52.     FW_END_CONSTRUCTOR
  53. }
  54.  
  55. //----------------------------------------------------------------------------------------
  56. //    FW_CByteArray::FW_CByteArray
  57. //----------------------------------------------------------------------------------------
  58.  
  59. FW_CByteArray::FW_CByteArray(void* buffer, unsigned long byteCount) :
  60.     fOwnBuffer(FALSE),
  61.     fOffset(0)
  62. {
  63.     _buffer = (octet*)buffer;
  64.     _length = byteCount;
  65.     _maximum = byteCount;
  66.  
  67.     FW_END_CONSTRUCTOR
  68. }
  69.  
  70. //----------------------------------------------------------------------------------------
  71. //    FW_CByteArray::FW_CByteArray
  72. //----------------------------------------------------------------------------------------
  73.  
  74. FW_CByteArray::FW_CByteArray(const void* buffer, unsigned long byteCount) :
  75.     fOwnBuffer(FALSE),
  76.     fOffset(0)
  77. {
  78.     _buffer = (octet*)buffer;
  79.     _length = byteCount;
  80.     _maximum = byteCount;
  81.  
  82.     FW_END_CONSTRUCTOR
  83. }
  84.  
  85. //----------------------------------------------------------------------------------------
  86. //    FW_CByteArray::FW_CByteArray
  87. //----------------------------------------------------------------------------------------
  88.  
  89. FW_CByteArray::FW_CByteArray(unsigned long byteCount) :
  90.     fOwnBuffer(TRUE),
  91.     fOffset(0)
  92. {
  93.     _buffer  = NULL;    // so if AllocateBlock fails it is clean
  94.     
  95.     if (byteCount != 0)
  96.         _buffer = (octet*)FW_CMemoryManager::AllocateBlock(byteCount);
  97.     
  98.     _length = byteCount;
  99.     _maximum = byteCount;
  100.  
  101.     FW_END_CONSTRUCTOR
  102. }
  103.  
  104. //----------------------------------------------------------------------------------------
  105. //    FW_CByteArray::~FW_CByteArray
  106. //----------------------------------------------------------------------------------------
  107.  
  108. FW_CByteArray::~FW_CByteArray()
  109. {
  110.     FW_START_DESTRUCTOR
  111.     
  112.     PrivDisposeByteArray();
  113. }
  114.  
  115. //----------------------------------------------------------------------------------------
  116. //    FW_CByteArray::PrivDisposeByteArray
  117. //----------------------------------------------------------------------------------------
  118.  
  119. void FW_CByteArray::PrivDisposeByteArray()
  120. {
  121.     if (fOwnBuffer && _buffer != NULL)
  122.         FW_CMemoryManager::FreeBlock(_buffer);
  123.     
  124.     fOwnBuffer = TRUE;
  125.     
  126.     _buffer = NULL;
  127.     _length = 0;
  128.     _maximum = 0;
  129.     fOffset = 0;
  130. }
  131.  
  132. //----------------------------------------------------------------------------------------
  133. //    FW_CByteArray::Set
  134. //----------------------------------------------------------------------------------------
  135.  
  136. void FW_CByteArray::Set(void* buffer, unsigned long byteCount)
  137. {
  138.     PrivDisposeByteArray();
  139.     
  140.     fOwnBuffer = FALSE;
  141.     
  142.     _buffer = (octet*)buffer;
  143.     _length = byteCount;
  144.     _maximum = byteCount;    
  145. }
  146.  
  147. //----------------------------------------------------------------------------------------
  148. //    FW_CByteArray::SCopyBufferet
  149. //----------------------------------------------------------------------------------------
  150.  
  151. unsigned long FW_CByteArray::CopyBuffer(void *buffer, unsigned long byteCount)
  152. {
  153.     FW_ASSERT((fOffset < _length) || (_length == 0));
  154.     
  155.     unsigned long cnt = ((byteCount + fOffset) <= _length) ? byteCount : _length;
  156.     
  157.     FW_CMemoryManager::CopyMemory(    _buffer + fOffset,
  158.                                     buffer,
  159.                                     cnt);
  160.     fOffset += cnt;
  161.     
  162.     if (fOffset == _length)
  163.         PrivDisposeByteArray();
  164.     
  165.     return cnt;
  166. }
  167.     
  168.  
  169.